package leetcode101.mathematical_problem;

/**
 * @author Synhard
 * @version 1.0
 * @Class Code5
 * @Description 415. 字符串相加
 * 给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和。
 *
 *  
 *
 * 提示：
 *
 * num1 和num2 的长度都小于 5100
 * num1 和num2 都只包含数字 0-9
 * num1 和num2 都不包含任何前导零
 * 你不能使用任何內建 BigInteger 库， 也不能直接将输入的字符串转换为整数形式
 * @tel 13001321080
 * @email 823436512@qq.com
 * @date 2021-04-24 11:38
 */
public class Code5 {
    public static void main(String[] args) {
        String s1 = "9";
        String s2 = "99";
        System.out.println(addStrings(s1, s2));
    }
    public static String addStrings(String num1, String num2) {
        int i = num1.length() - 1;
        int j = num2.length() - 1;
        int tag = 0;
        int n;
        int m;
        int sum;
        StringBuilder sb = new StringBuilder(Math.max(i, j) + 2);

        for (; i > -1 && j > -1; i--, j--) {
            n = num1.charAt(i) - '0';
            m = num2.charAt(j) - '0';
            sum = m + n + tag;
            if (sum >= 10) {
                sb.insert(0, sum % 10);
                tag = 1;
            } else {
                sb.insert(0, sum);
                tag = 0;
            }
        }

        if (i == -1 && j == -1) {
            sb.insert(0, tag == 0 ? "" : tag);
            return new String(sb);
        }

        while (i > -1) {
            sum = num1.charAt(i--) - '0' + tag;
            if (sum >= 10) {
                sb.insert(0, sum % 10);
                tag = 1;
            } else {
                sb.insert(0, sum);
                tag = 0;
            }
        }
        while (j > -1) {
            sum = num2.charAt(j--) - '0' + tag;
            if (sum >= 10) {
                sb.insert(0, sum % 10);
                tag = 1;
            } else {
                sb.insert(0, sum);
                tag = 0;
            }
        }

        sb.insert(0, tag == 0 ? "" : tag);

        return new String(sb);
    }
}
/*
要时刻注意每一种情况下进位的情况
 */